package com.veer.shop.config;

import java.util.Arrays;
import java.util.List;

/**
 * 项目全局常量配置类
 * 
 * @author WangBin
 * 2020年8月12日-下午3:24:38
 */
public class Constants {
	
	/*------------------------------------公共服务 相关---------------------------------------------*/
	// 手机验证码存储 REDIS - 前缀
	public static final String REDIS_SUFFIX_PHONE_VCODE = "veer:phone:vcode:";
	// 手机验证码存储 REDIS - 有效期 10分钟（毫秒）
	public static final long REDIS_PHONE_VCODE_LIFE_TIME = 10 * 60 * 1000;
	
	/*------------------------------------审核状态 相关---------------------------------------------*/
	// 待审核
	public static final String AUDIT_WATTING = "AUDIT_WATTING";
	// 审核通过
	public static final String AUDIT_APPROVED = "AUDIT_APPROVED";
	// 审核拒绝
	public static final String AUDIT_REFUSE = "AUDIT_REFUSE";
	
	/*------------------------------------会员 相关---------------------------------------------*/
	// 性别男
	public static final String GENDER_MALE = "MALE";
	// 性别女
	public static final String GENDER_FEMALE = "FEMALE";
	// 性别保密
	public static final String GENDER_UNKNOWN = "UNKNOWN";
	// 会员类型 - 普通会员
	public static final String CUSTOMRE_TYPE_CUSTOMER = "CUSTOMER";
	// 会员类型 - 经销商
	public static final String CUSTOMRE_TYPE_DISTRIBUTOR = "DISTRIBUTOR";
	// 会员类型 - 区域运营商
	public static final String CUSTOMRE_TYPE_OPERATOR = "OPERATOR";
	// 会员类型 - 供应商
	public static final String CUSTOMRE_TYPE_SUPPLIER = "SUPPLIER";
	// 登录方式 - 用户名密码登录
	public static final String CUSTOMER_LOGIN_METHOD_USERNAME_PWD = "USERNAME_PWD";
	// 登录方式 - 手机号密码登录
	public static final String CUSTOMER_LOGIN_METHOD_PHONE_PWD = "PHONE_PWD";
	// 登录方式 - 邮箱密码登录
	public static final String CUSTOMER_LOGIN_METHOD_EMAIL_PWD = "EMAIL_PWD";
	// 登录方式 - 手机短信验证码登录
	public static final String CUSTOMER_LOGIN_METHOD_PHONE_VCODE = "PHONE_VCODE";
	// 会员支持的登录方式List
	public static final List<String> CUSTOMER_LOGIN_METHOD_LIST = Arrays.asList(
		CUSTOMER_LOGIN_METHOD_USERNAME_PWD,
		CUSTOMER_LOGIN_METHOD_PHONE_PWD,
		CUSTOMER_LOGIN_METHOD_EMAIL_PWD,
		CUSTOMER_LOGIN_METHOD_PHONE_VCODE
	);
	
	/*------------------------------------JWT Token 相关---------------------------------------------*/
	// http 请求 header 头的 Authorization 属性
	public static final String HTTP_HEADER_AUTHORIZATION = "Authorization";
	// 无需校验 token 请求地址
	public static final List<String> EXCLUDE_PATH_LIST = Arrays.asList(ApiUrlConfig.API_ADMIN_TOKEN_URL, ApiUrlConfig.API_CUSTOMER_TOKEN_URL);
	// Token 授权标识 1 已授权
	public static final int AUTH_TOKEN_AUTHORIZED_1 = 1;
	// Token 授权标识 0 未授权
	public static final int AUTH_TOKEN_AUTHORIZED_0 = 0;
	// JWT token 有效时间 4个小时(毫秒)
	public static final long JWT_TOKEN_LIFE_TIME = 4 * 60 * 60 * 1000; 
	// JWT 密钥签发者
	public static final String JWT_TOKEN_SIGN_ISSUER = "veer";
	// JWT 头信息 加密类型
	public static final String JWT_TOKEN_HEAHER_TYPE = "JWT";
	// JWT 头信息 加密算法
	public static final String JWT_TOKEN_HEAHER_ALG = "HS256";
	// JWT 密码加密 密钥
	public static final String JWT_PASSOWRD_SECRET = "!@#$88aa77bb66cc55dd#@!";
	// JWT 存入缓存后台用户token的key前缀
	public static final String REDIS_PREFIX_USER_TOKEN = "veer:user:token:";
	// JWT 存入缓存后台用户token过期时间的key前缀
	public static final String REDIS_PREFIX_USER_EXPIRED = "veer:user:expired:";
	// JWT 存入缓存会员token的key前缀
	public static final String REDIS_PREFIX_CUSTOMER_TOKEN = "veer:customer:token:";
	// JWT 存入缓存会员token过期时间的key前缀
	public static final String REDIS_PREFIX_CUSTOMER_EXPIRED = "veer:customer:expired:";
	
	/*------------------------------------参数 校验 相关---------------------------------------------*/
	// 参数校验 - 用户名 - 长度 - 大于 5
	public static final int PARAMS_USERNAME_VALID_LENGTH_MIN = 5;
	// 参数校验 - 实体类 为空
	public static final String PARAMS_OBJECT_IS_NULL = "参数对象为空！";
	// 参数校验 - 用户名 - 长度 - 大于 5 - 提示
	public static final String PARAMS_USERNAME_VALID_LENGTH_MIN_MESSAGE = String.format("账户长度必须大于%d个字符", PARAMS_USERNAME_VALID_LENGTH_MIN);
	// 参数校验 - 昵称 - 长度 - 大于 1
	public static final int PARAMS_NAME_VALID_LENGTH_MIN = 2;
	// 参数校验 - 昵称 - 长度 - 大于 1 - 提示
	public static final String PARAMS_NAME_VALID_LENGTH_MIN_MESSAGE = String.format("昵称长度必须大于%d个字符", PARAMS_NAME_VALID_LENGTH_MIN);
	// 参数校验 - 密码 - 长度 - 大于 5
	public static final int PARAMS_PASSWORD_VALID_LENGTH_MIN = 5;
	// 参数校验 - 密码 - 长度 - 大于 5 - 提示
	public static final String PARAMS_PASSWORD_VALID_LENGTH_MIN_MESSAGE = String.format("密码长度必须大于%d个字符", PARAMS_PASSWORD_VALID_LENGTH_MIN);
	// 参数校验 - 邮箱
	public static final String PARAMS_EMAIL_VALID_MESSAGE = "邮箱格式不正确！";
	// 参数校验 - 手机号
	public static final String PARAMS_PHONE_VALID_MESSAGE = "手机号格式不正确！";
	// 管理员CURD - 管理员账户信息不存在
	public static final String ADMIN_USER_INFO_NOT_FOUND = "管理员账户信息不存在！";
	
	/*------------------------------------商品 相关---------------------------------------------*/
	// 默认的顶级商品分类ID
	public static final int DEFAULT_PRODUCT_CATEGORY_ID = 1;
	// 系统支持的商品类型 - 单规格
	public static final String PRODUCT_TYPE_SIMPLE = "simple";
	// 系统支持的商品类型 - 多规格
	public static final String PRODUCT_TYPE_CONFIGURABLE = "configurable";
	// 系统支持的商品类型 - 集合
	public static final List<String> ALLOWED_PRODUCT_TYPE_LIST = Arrays.asList(PRODUCT_TYPE_SIMPLE, PRODUCT_TYPE_CONFIGURABLE);
	
	/*------------------------------------前端接口 相关---------------------------------------------*/
	// 前端多ID拼接分隔字符
	public static final String SEPARATOR_STRING = ",";
	
	// 系统默认分页-显示记录数 20
	public static final int DEFAULT_PAGE_SIZE = 20;
	
	// 系统默认分页-显示当前页数 1
	public static final int DEFAULT_PAGE_NO = 1;
	
	/*------------------------------------文件上传 相关---------------------------------------------*/
	// 系统文件上传支持的图片格式
	public static final List<String> ALLOEWED_UPLOAD_IMAGE_FORMAT = Arrays.asList("png", "jpg", "gif", "jpeg");
	
	// 系统文件上传支持的视频格式
	public static final List<String> ALLOEWED_UPLOAD_VIDEO_FORMAT = Arrays.asList("mp4");
	
	// 系统文件上传文件图片大小限制(KB)
	public static final double ALLOEWED_UPLOAD_IMAGE_SIZE = 1 * 1024;
	
	// 系统文件上传文件视频大小限制(KB)
	public static final double ALLOEWED_UPLOAD_VIDEO_SIZE = 10 * 1024;
	
	// 系统文件类型 - 文本
	public static final String FILE_TYPE_TEXT = "TEXT";
	
	// 系统文件类型 - 图片
	public static final String FILE_TYPE_IMAGE = "IMAGE";
	
	// 系统文件类型 - 音频
	public static final String FILE_TYPE_AUDIO = "AUDIO";
	
	// 系统文件类型 - 视频
	public static final String FILE_TYPE_VIDEO = "VIDEO";
	
	/*------------------------------------系统配置 相关---------------------------------------------*/
	
	// 系统配置 key - 文件默认储存根目录
	public static final String SYSTEM_CONFIG_FILE_PATH_ROOT = "file.path.root";
	
	// 系统配置 key - 图片文件默认储存根目录
	public static final String SYSTEM_CONFIG_IMAGE_PATH_ROOT = "image.path.root";
	
	// 系统配置 key - 视频文件默认储存根目录
	public static final String SYSTEM_CONFIG_VIDEO_PATH_ROOT = "video.path.root";
	
	// 系统配置 key - 图片是否需要水印
	public static final String SYSTEM_CONFIG_IMAGE_WATER_MARK_ENABLE = "image.waterMark.enable";
	
	// 系统配置 key - 图片中图 - 宽
	public static final String SYSTEM_CONFIG_IMAGE_MIDDLE_WIDTH = "image.middle.width";
	
	// 系统配置 key - 图片中图 - 高
	public static final String SYSTEM_CONFIG_IMAGE_MIDDLE_HEIGTH = "image.middle.height";
	
	// 系统配置 key - 图片小图 - 宽
	public static final String SYSTEM_CONFIG_IMAGE_SMALL_WIDTH = "image.small.width";
		
	// 系统配置 key - 图片小图 - 高
	public static final String SYSTEM_CONFIG_IMAGE_SMALL_HEIGTH = "image.small.height";
	
	// 系统配置 key - 图片文件储存根目录
	public static final String SYSTEM_CONFIG_IMAGE_PATH = "image.path";
	
	// 系统配置 key - 视频文件储存根目录
	public static final String SYSTEM_CONFIG_VIDEO_PATH = "video.path";
	
	// 系统配置 key - 导入文件存储目录
	public static final String SYSTEM_CONFIG_IMPORT_FILE_PATH = "import.file.path";
	
}
